From 1927a8af71b236aafba125eb9ce732b5d7b9d1fd Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 27 May 2020 19:00:18 -0400 Subject: [PATCH] tooltips: Fix a line wrap mishap We don't want wrapping labels to cause tooltips to have excessive height, so we need to set a reasonable value for width-chars, without forcing short tooltips into a full line length. Also be careful to respect preexisting line breaks (we have such examples in widget factory). --- gtk/gtktooltipwindow.c | 24 ++++++++++++++++++++++++ gtk/ui/gtktooltipwindow.ui | 1 - 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/gtk/gtktooltipwindow.c b/gtk/gtktooltipwindow.c index 432f2aef8e..c30ebf1616 100644 --- a/gtk/gtktooltipwindow.c +++ b/gtk/gtktooltipwindow.c @@ -404,6 +404,28 @@ gtk_tooltip_window_new (void) return g_object_new (GTK_TYPE_TOOLTIP_WINDOW, NULL); } +static void +update_label_width (GtkLabel *label) +{ + const char *text; + + text = gtk_label_get_text (label); + if (strchr (text, '\n')) + { + gtk_label_set_wrap (label, FALSE); + } + else + { + int len; + + len = g_utf8_strlen (text, -1); + + gtk_label_set_width_chars (label, MIN (len, 50)); + gtk_label_set_max_width_chars (label, MIN (len, 50)); + gtk_label_set_wrap (label, TRUE); + } +} + void gtk_tooltip_window_set_label_markup (GtkTooltipWindow *window, const char *markup) @@ -411,6 +433,7 @@ gtk_tooltip_window_set_label_markup (GtkTooltipWindow *window, if (markup != NULL) { gtk_label_set_markup (GTK_LABEL (window->label), markup); + update_label_width (GTK_LABEL (window->label)); gtk_widget_show (window->label); } else @@ -426,6 +449,7 @@ gtk_tooltip_window_set_label_text (GtkTooltipWindow *window, if (text != NULL) { gtk_label_set_text (GTK_LABEL (window->label), text); + update_label_width (GTK_LABEL (window->label)); gtk_widget_show (window->label); } else diff --git a/gtk/ui/gtktooltipwindow.ui b/gtk/ui/gtktooltipwindow.ui index 59bd028d89..fd2e7b7fd3 100644 --- a/gtk/ui/gtktooltipwindow.ui +++ b/gtk/ui/gtktooltipwindow.ui @@ -19,7 +19,6 @@ 1 - 70 -- 2.30.2